<?php
/*
 * Conjunto de funciones que nos ayudaran con la validación de expresiones
 * regulares
 */

/**
 *  Funcion que valida si un nombre esta formado por numeros, letras o guion bajo
 * y su tamaño esté comprendido entre 4 y 50 caracteres.
 * Lo usamos para le nombre de usuario.
 * @param <String> $name nombre
 * @return <Boolean> salida
 */
function valid_user($string){
    if (preg_match('/^[a-zA-Z0-9\_]{4,50}$/', $string)){
        $salida=true;
    }else{
        $salida=false;
    }
    return $salida;
}
/**
 *Función que valida un nombre compuedto por valores alfanumericos, espacios, gion
 * y letras del español, con una tamaño comprendido entre 2 y 50 caracteres.
 * @param <type> $string
 * @return <type>
 */
function valid_name($string){
    if (preg_match('/^[a-zA-Z0-9\ \-üáéíóúñÁÉÍÓÚÑ]{2,50}$/', $string)){
        $salida=true;
    }else{
        $salida=false;
    }
    return $salida;
}
/**
 *  Función generica que valida texto, queno contengan caracteres extraños
 * como puntos, dos punto, punto y coma...
 * Solo acepta caracteres alfanumericos,espacios, guiones bajos y noemales, y
 * caracteres del español, comprendidos entre 2 y 50 caracteres.
 * @param <type> $string
 * @return <type>
 */
function valid_string($string){
    if (preg_match('/^[a-zA-Z0-9\ \_\-üáéíóúñÁÉÍÓÚÑ.,;¿?!¡()€$]{2,50}$/', $string)){
        $salida=true;
    }else{
        $salida=false;
    }
    return $salida;
}
/**
 *  Funcion utilizada para la validacion de la descripción, es igual que la de string
 * añadiendole los retornos de carro, comprendidos entre 4 y 50 caracteres.
 * @param <type> $string
 * @return <type>
 */
function valid_description($string){
    if (preg_match('/^[a-zA-Z0-9\ \r\n\_\-üáéíóúñÁÉÍÓÚÑ.,;¿?!¡()€$]{4,50}$/', $string)){
        $salida=true;
    }else{
        $salida=false;
    }
    return $salida;
}
/**
 *  Función que determina si un correo electronico esta bien definido.
 * @param <type> $email
 * @return <type>
 */
function valid_email($email){
    if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)) {
        $salida=true;
    }else{
        $salida=false;
    }
    return $salida;
}

/**
 *  Función que valida los apellidos.
 * @param <type> $apellidos
 * @return <type>
 */
function valid_apellidos($apellidos){
    if (preg_match("/^[a-zA-Z0-9\ \-áéíóúñÁÉÍÓÚÑ]{2,50}$/", $apellidos)){
        $salida=true;
    }else{
        $salida=false;
    }
    return $salida;
}
//BLOQUE VALDACION II
//Validaciones de lectura en SQL
/**
 * Determina si dicho nombre de usuario existe.
 * @param <type> $ep
 * @param <type> $name
 * @return <type>
 */
function name_exist($ep,$user){
    $count=0;
    $valid=valid_user($user);
    if ($valid){
        try{
            $dbh=$ep->dbh;
            $SQL="SELECT * FROM usuarios WHERE user = '$user'";
            $stmt = $dbh->prepare($SQL);
            $stmt->execute();
            $count=$stmt->rowCount();
        }catch (PDOException $e){
            $ep->error("Error en la conexion con la base de datos.<br/>");
            //no usar en produccion
            //$ep->error("error al crear usuario: ".$e->GetMessage());
        }
    }

    return ($count==1);
}
/**
 *  Determina si dicho identificador de provincia corresponde con alguno de los
 * identificadores de la tabla provincia.
 * @param <type> $ep
 * @param <type> $id_provincia
 * @return <type>
 */


function valid_estado($estado){
    if ($estado=="abierta" ||$estado=="pendiente"||$estado=="aceptada"||$estado=="confirmada"){
        $salida=true;
    }else{
        $salida=false;
    }
    return $salida;
}
/**
 *  Funcion que nos dice si la extensión está permitida.
 * @param <type> $fileName
 * @return <type>
 */
function isNotAllowedExtension($fileName) {
    $fileName=strtolower($fileName);
    $allowedExtensions = array("jpg", "jpeg", "png","bmp","gif");
    return !in_array(end(explode(".", $fileName)), $allowedExtensions);
}

/**
 *  Funcion que nos dice si las fechas de creación de un concurso son correctas.
 * @param <type> $ep
 * @param <type> $fecha_inicio
 * @param <type> $fecha_fin
 * @return <type>
 */
function valid_fechas_concurso($ep, $fecha_inicio, $fecha_fin){
    $salida=true;
    if(strlen($fecha_inicio)!=10 || strlen($fecha_fin)!=10){
        $ep->error("Las fechas no existen.<br/>");
        $salida=false;
    }else{
        $dia_inicio=substr($fecha_inicio,0,2);
        $mes_inicio=substr($fecha_inicio,3,2);
        $ano_inicio=substr($fecha_inicio,6,4);
        $dia_fin=substr($fecha_fin,0,2);
        $mes_fin=substr($fecha_fin,3,2);
        $ano_fin=substr($fecha_fin,6,4);
        if(!checkdate($mes_inicio, $dia_inicio, $ano_inicio) || !checkdate($mes_fin, $dia_fin, $ano_fin)){ //Las fechas no existen
            $ep->error("Las fechas no existen.<br/>");
            $salida=false;
        }
        $hoy = date("d-m-Y");
        $ini=$dia_inicio."-".$mes_inicio."-".$ano_inicio;
        $compara=compara_fechas($ini, $hoy);
        if($compara<=0){ // Empieza hoy o antes de hoy
            $ep->error("El concurso no puede empezar hoy ni crearse ya empezado.<br/>");
            $salida=false;
        }
        $fin=$dia_fin."-".$mes_fin."-".$ano_fin;
        $compara=compara_fechas($ini, $fin);
        if($compara>0){ //No dura al menos un día
            $ep->error("La fecha de finalización del cocnurso no puede ser anterior a la de inicio.<br/>");
            $salida=false;
        }
    }
    return $salida;
}
/**
 *  Funcion que nos dice si el crédito del concurso que se está intentando crear es correcto.
 * @param <type> $ep
 * @param <type> $credito
 * @return <boolean> $salida
 */
function valid_credito($ep, $credito){
    if($credito<1000 || $credito>100000){
        $salida=false;
        $ep->error("El crédito inicial es incorrecto, debe estar comprendido entre 1.000 € y 100.000 €.");
    }else{
        $salida=true;
    }
    return $salida;
}

/**
 *  Funcion que nos dice si el título del concurso que se está intentando crear es correcto.
 * @param <type> $ep
 * @param <type> $titulo
 * @return <boolean> $salida
 */
function valid_titulo_concurso($ep, $titulo){
    $size=strlen($titulo);
    if($size<51){
        if($size>0){
            $salida=true;
        }else{
            $salida=false;
        $ep->error("Tienes que ponerle un título al concurso.");
        }
    }else{
        $salida=false;
        $ep->error("El título del concurso no puede tener más de 50 carácteres.");
    }
    return $salida;
}

/**
 *  Funcion que nos dice si la descripción del concurso que se está intentando crear es correcto.
 * @param <type> $ep
 * @param <type> $descripcion
 * @return <boolean> $salida
 */
function valid_descripcion_concurso($ep, $descripcion){
    $size=strlen($descripcion);
    if($size<301){
        if($size>0){
            $salida=true;
        }else{
            $salida=false;
        $ep->error("Tienes que ponerle una descripción al concurso.");
        }
    }else{
        $salida=false;
        $ep->error("La descripción del concurso no puede tener más de 300 carácteres.");
    }
    return $salida;
}

function  valid_mercados($ep, $array_mercados){
    $num_mercados=count($array_mercados);
    $salida=false;
    for ($index = 1; $index <= $num_mercados; $index++) {
        if($array_mercados[$index]==$index){
            $salida=true;
        }
    }
    if(!$salida){
        $ep->error("Debes seleccionar al menos un mercado.");
    }
    return $salida;
}

function valid_puntuación($ep,$max,$min,$ult){
    $salida=true;
    if((!is_int($max)) || (!is_int($min)) || (!is_int($ult))){
        $ep->error("En los campos de puntuaciones debes poner números.");
        $salida=false;
    }
    if($max<1){
        $ep->error("La puntuación del ganador debe ser al menos 1 punto.");
        $salida=false;
    }
    if($min<1){
        $ep->error("El último jugador que puntua debe llevarse algún punto.");
        $salida=false;
    }
    if(($max-$min)<1){
        $ep->error("La puntuación del ganador debe ser mayor que la del último jugador que recibe puntos.");
        $salida=false;
    }
    if($ult<3){
        $ep->error("Deben puntuar al menos 3 jugadores.");
        $salida=false;
    }
    return $salida;
}

function compara_fechas($fecha1,$fecha2) {
    if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha1))
        list($dia1,$mes1,$año1)=split("/",$fecha1);
    if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha1))
        list($dia1,$mes1,$año1)=split("-",$fecha1);
    if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha2))
        list($dia2,$mes2,$año2)=split("/",$fecha2);
    if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha2))
        list($dia2,$mes2,$año2)=split("-",$fecha2);
    $dif = mktime(0,0,0,$mes1,$dia1,$año1) - mktime(0,0,0, $mes2,$dia2,$año2);
    return ($dif);


}

function concurso_terminado($fecha_fin){
    $dia_fin=substr($fecha_fin,8,2);
    $mes_fin=substr($fecha_fin,5,2);
    $ano_fin=substr($fecha_fin,0,4);
    $fin=$dia_fin."-".$mes_fin."-".$ano_fin;
    $hoy = date("d-m-Y");
    $compara=compara_fechas($hoy, $fin);
    if($compara>0){
        $salida=true;
    }else{
        $salida=false;
    }
    return $salida;
}

?>
